﻿namespace Arms.Application.Modules.Products
{
    using Arms.Application.Modules.Products.DTOs;
    using Arms.Application.Services;
    using System.Collections.Generic;

    /// <summary>
    /// Base contract for query service regarding the product domain
    /// </summary>
    public interface IProductQueryService : IServiceBase
    {
        /// <summary>
        /// Returns a list of menu categories by menu id.
        /// </summary>
        /// <param name="menuID"></param>
        /// <returns></returns>
        IEnumerable<EntityDescribedDTO> GetMenuCategories(int menuID);
        /// <summary>
        /// Return a list of all products.
        /// </summary>
        /// <returns></returns>
        IEnumerable<ProductDTO> GetAllProducts();
        /// <summary>
        /// Return a list of all products in order.
        /// </summary>
        /// <param name="orderID"></param>
        /// <returns></returns>
        IEnumerable<ProductDTO> GetProductsInOrder(int orderID);
        /// <summary>
        /// Return a list of all products in order.
        /// </summary>
        /// <param name="orderID"></param>
        /// <returns></returns>
        IEnumerable<ProductsInOrderDTO> GetProductsInOrderWithQuantity(int orderID);
        /// <summary>
        /// Returns a list of product classes by menu category id.
        /// </summary>
        /// <param name="menuCategoryID"></param>
        /// <returns></returns>
        IEnumerable<EntityDescribedDTO> GetProductClassesByMenuCategory(int menuCategoryID);
        /// <summary>
        /// Returns a list of products by product class id.
        /// </summary>
        /// <param name="menuCategoryID"></param>
        /// <returns></returns>
        IEnumerable<ProductDTO> GetProductsByProductClass(int productClassID);
        /// <summary>
        /// Returns a list of product classes.
        /// </summary>
        /// <returns></returns>
        IEnumerable<EntityDescribedDTO> GetProductClasses();
        /// <summary>
        /// Returns a list of product sub classes.
        /// </summary>
        /// <returns></returns>
        IEnumerable<EntityDescribedDTO> GetProductSubClasses();
    }
}
